package Traverse.traverse;

import domain.TreeNode;

import java.util.Stack;

/**
 *
 *      1
 *    2    3
 *  4  5  6  7
 *
 * @author: leiwenkang
 * @date: 2020/6/1
 * @time: 20:05
 */
public class PostOrder {

    public static void main(String[] args) {
        TreeNode node1 = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(3);
        TreeNode node4 = new TreeNode(4);
        TreeNode node5 = new TreeNode(5);
        TreeNode node6 = new TreeNode(6);
        TreeNode node7 = new TreeNode(7);
        node1.left = node2;
        node1.right = node3;
        node2.left = node4;
        node2.right = node5;
        node3.left = node6;
        node3.right = node7;
        node4.left = node4.right = null;
        node5.left = node5.right = null;
        node6.left = node6.right = null;
        node7.left = node7.right = null;
        postOrderTraverse(node1);
    }

    public static void postOrderTraverse(TreeNode root) {
        if(root == null) {
            return;
        }
        Stack<TreeNode> stack = new Stack<>();
        //输出栈
        Stack<TreeNode> outStack = new Stack<>();

        stack.push(root);
        while(!stack.isEmpty()) {
            TreeNode temp = stack.pop();

            outStack.push(temp);

            if(temp.left != null) {
                stack.push(temp.left);
            }

            if(temp.right != null) {
                stack.push(temp.right);
            }
        }

        while(!outStack.isEmpty()) {
            System.out.print(outStack.pop().val + " ");
        }
    }
}
